#pragma once
#include"TaskQueue.h"
#include<pthread.h>

class ThreadPool
{
public:
	//创建线程池并初始化
	ThreadPool(int min,int max);
        
	//销毁线程池
	~ThreadPool();
        
	//给线程池添加任务
	void addTask(Task task);
        
	//获取线程池工作的个数
	int getBusyNum();
        
	//获取线程池中活着的个数
	int getAliveNum();


private:
	//工作的线程(消费者线程)任务函数
    static void* worker(void* arg);

	//管理者线程任务函数
	static void* manager(void* arg);

	//单个线程退出
	void threadExit();
private:
	//任务队列
	TaskQueue* taskQ;

	pthread_t managerID;                 //管理者线程ID
	pthread_t* threadIDs;                //工作的线程ID
	int minNum;                          //最小线程数
	int maxNum;                          //最大线程数
	int busyNum;                         //忙的线程的个数
	int liveNum;                         //存活的线程的个数
	int exitNum;                         //要销毁的线程的个数
	pthread_mutex_t mutexPool;           //锁整个的线程池
	pthread_cond_t notEmpty;             //任务队列是否为空
    static const int NUMBER = 2;
	bool shutdown; //是否要销毁线程池，销毁为1，不销毁为0
};
